Cuáles son las fases de resolución de problemas. Características de un algoritmo.

Las fases de resolución de un problema con computadora son:

Constituyen el ciclo de vida del software y las fases o etapas usuales son:

  • Análisis. El problema se analiza teniendo presente la especificación de los requisitos dados por el cliente de la empresa o por la persona que encarga el programa.
  • Diseño. Una vez analizado el problema, se diseña una solución que conducirá a un algoritmo que resuelva el problema.
  • Codificación (implementación). La solución se escribe en la sintaxis del lenguaje de alto nivel (por ejemplo, C) y se obtiene un programa.
  • Compilación, ejecución y verificación. El programa se ejecuta, se comprueba rigurosamente y se eliminan todos los errores (denominados «bugs», en inglés) que puedan aparecer.
  • Depuración y mantenimiento. El programa se actualiza y modifica cada vez que sea necesario, de modo que se cumplan todas las necesidades de cambio de sus usuarios.
  • Documentación. Escritura de las diferentes fases del ciclo de vida del software, esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de referencia, así como normas para el mantenimiento.
  • Características de un algoritmo

  • preciso (indicar el orden de realización en cada paso),
  • definido (si se sigue dos veces, obtiene el mismo resultado cada vez),
  • finito (tiene fin; un número determinado de pasos).
  • En qué consiste la primera fase de la resolución de problemas:

    La primera fase de la resolución de un problema con computadora es el análisis del problema. Esta fase requiere una clara definición, donde se contemple exactamente lo que debe hacer el programa y el resultado o solución deseada.

    Dado que se busca una solución por computadora, se precisan especificaciones detalladas de entrada y salida.

    Para poder definir bien un problema es conveniente responder a las siguientes preguntas:

  • ¿Qué entradas se requieren? (tipo y cantidad).
  • ¿Cuál es la salida deseada? (tipo y cantidad).
  • ¿Qué método produce la salida deseada?
  • En qué consiste la segunda fase de la resolución de problemas

    En la etapa de análisis del proceso de programación se determina qué hace el programa. En la etapa de diseño se determina cómo hace el programa la tarea solicitada. Los métodos más eficaces para el proceso de diseño se basan en el conocido por divide y vencerás. Es decir, la resolución de un problema complejo se realiza dividiendo el problema en subproblemas y a continuación dividir estos subproblemas en otros de nivel más bajo, hasta que pueda ser implementada una solución en la computadora.

    Este método se conoce técnicamente como diseño descendente (top-down) o modular. El proceso de romper el problema en cada etapa y expresar cada paso en forma más detallada se denomina refinamiento sucesivo.

    Cada subprograma es resuelto mediante un módulo (subprograma) que tiene un solo punto de entrada y un solo punto de salida.

    Cualquier programa bien diseñado consta de un programa principal (el módulo de nivel más alto) que llama a subprogramas (módulos de nivel más bajo) que a su vez pueden llamar a otros subprogramas.

    Los programas estructurados de esta forma se dice que tienen un diseño modular y el método de romper el programa en módulos más pequeños se llama programación modular. Los módulos pueden ser planeados, codificados, comprobados y depurados independientemente (incluso por diferentes programadores) y a continuación combinarlos entre sí. El proceso implica la ejecución de los siguientes pasos hasta que el programa se termina:

    1. Programar un módulo.
    2. Comprobar el módulo.
    3. Si es necesario, depurar el módulo.
    4. Combinar el módulo con los módulos anteriores.

    El proceso que convierte los resultados del análisis del problema en un diseño modular con refinamientos sucesivos que permitan una posterior traducción a un lenguaje se denomina diseño del algoritmo.

    El diseño del algoritmo es independiente del lenguaje de programación en el que se vaya a codificar posteriormente.

    Las dos herramientas más utilizadas para diseñar algoritmos

    Diagramas de flujo

    Un diagrama de flujo (flowchart) es una representación gráfica de un algoritmo. Los símbolos utilizados han sido normalizados por el Instituto Norteamericano de Normalización (ANSI).

    Pseudocódigo

    El pseudocódigo es una herramienta de programación en la que las instrucciones se escriben en palabras similares al inglés o español, que facilitan tanto la escritura como la lectura de programas. En esencia, el pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos.

    Qué es la programación modular

    La programación modular es uno de los métodos de diseño más flexible y potentes para mejorar la productividad de un programa. En programación modular el programa se divide en módulos (partes independientes), cada una de las cuales ejecuta una única actividad o tarea y se codifican independientemente de otros módulos. Cada uno de estos módulos se analizan, codifican y ponen a punto por separado.

    Cada programa contiene un módulo denominado programa principal, que controla todo lo que sucede; se transfiere el control a submódulos (posteriormente se denominará subprogramas), de modo que ellos puedan ejecutar sus funciones; sin embargo, cada submódulo devuelve el control al módulo principal cuando se haya completado su tarea. Si la tarea asignada a cada submódulo es demasiado compleja, éste deberá romperse en otros módulos más pequeños. El proceso sucesivo de subdivisión de módulos continúa hasta que cada módulo tenga solamente una tarea específica que ejecutar. Esta tarea puede ser entrada, salida, manipulación de datos, control de otros módulos o alguna combinación de éstos.

    Un módulo puede transferir temporalmente (bifurcar) el control a otro módulo; sin embargo, cada módulo debe eventualmente devolver el control al módulo del cual se recibió originalmente el control.

    Los módulos son independientes en el sentido en que ningún módulo puede tener acceso directo a cualquier otro módulo excepto el módulo al que llama y sus propios submódulos. Sin embargo, los resultados producidos por un módulo pueden ser utilizados por cualquier otro módulo cuando se transfiera a ellos el control.

    Dado que los módulos son independientes, diferentes programadores pueden trabajar simultáneamente en diferentes partes del mismo programa. Esto reducirá el tiempo del diseño del algoritmo y posterior codificación del programa. Además, un módulo se puede modificar radicalmente sin afectar a otros módulos, incluso sin alterar su función principal.

    La descomposición de un programa en módulos independientes más simples se conoce también como el método de «divide y vencerás» (divide and conquer). Se diseña cada módulo con independencia de los demás, y siguiendo un método ascendente o descendente se llegará hasta la descomposición final del problema en módulos en forma jerárquica.

    Qué es la programación estructurada. Qué reglas debe cumplir.

    La programación estructurada significa escribir un programa de acuerdo a las siguientes reglas:

  • El programa tiene un diseño modular.
  • Los módulos están diseñados de modo descendente.
  • Cada módulo se codifica utilizando las tres estructuras de control básicas: secuencia, selección y repetición.
  • La programación estructurada utiliza un número limitado de estructuras de control que minimizan la complejidad de los programas y, por consiguiente, reducen los errores; hace los programas más fáciles de escribir, verificar, leer y mantener. Los programas deben estar dotados de una estructura.

    La programación estructurada es el conjunto de técnicas que incorporan:

  • recursos abstractos,
  • diseño descendente (top-down),
  • estructuras básicas.
  • Recursos abstractos

    La programación estructurada se auxilia de los recursos abstractos en lugar de los recursos concretos de que dispone un determinado lenguaje de programación.

    Descomponer un programa en términos de recursos abstractos -según Dijkstra- consiste en descomponer una determinada acción compleja en términos de un número de acciones más simples capaces de ser ejecutadas o que constituyan instrucciones de computadoras disponibles.

    Diseño descendente (top-down)

    El diseño descendente (top-down) es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento (stepwise). La metodología descendente consiste en efectuar una relación entre las sucesivas etapas de estructuración de modo que se relacionan unas con otras mediante entradas y salidas de información. Es decir, se descompone el problema en etapas o estructuras jerárquicas, de forma que se puede considerar cada estructura desde dos puntos de vista: ¿qué hace? y ¿cómo lo hace?

    Estructuras de control

    Las estructuras de control de un lenguaje de programación son métodos para especificar el orden en que las instrucciones de un algoritmo se ejecutarán. El orden de ejecución de las sentencias (lenguaje) o instrucciones determinan el flujo de control. Estas estructuras de control son, por consiguiente, fundamentales en los lenguajes de programación y en los diseños de algoritmos, especialmente los pseudocódigos.

    Las tres estructuras de control básico son:

  • secuencia
  • selección
  • repetición
  • La programación estructurada hace los programas más fáciles de escribir, verificar, leer y mantener; utiliza un número limitado de estructuras de control que minimizan la complejidad de los problemas.

    Cuáles son las características de un algoritmo

    Las características fundamentales que debe cumplir todo algoritmo son:

  • Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
  • Cuáles son los elementos básicos de un programa

    Los lenguajes de programación ---como los restantes lenguajes- tienen elementos básicos que se utilizan como bloques constructivos, así como reglas para las que esos elementos se combinan. Estas reglas se denominan sintaxis del lenguaje. Solamente las instrucciones sintácticamente correctas pueden ser interpretadas por la computadora y los programas que contengan errores de sintaxis son rechazados por la máquina. Los elementos básicos constitutivos de un programa o algoritmo son:

    Además de estos elementos básicos, existen otros elementos que forman parte de los programas, cuya comprensión y funcionamiento será vital para el correcto diseño de un algoritmo y naturalmente la codificación del programa. Estos elementos son:

  • bucles,
  • contadores,
  • acumuladores,
  • interruptores,
  • estructuras:
  • l. secuenciales,

    2. selectivas,

    3. repetitivas.